#ifndef GF_H
#define GF_H

#include "main.h"
#include "gf_types.h"

#ifndef POLY_TABLE_PATH
  #define POLY_TABLE_PATH "../poly_table/prim_poly_table"
#endif


/* Function declarations */
Vector * gf_bin_primpoly(int m);
Matrix * gf_vector(int m, Vector * prim_poly);
Matrix * gf_add_one(int m, Matrix * v);
int elementReduce(int m, Matrix * add_one, Vector * x);
int compareFunction (const int *a, const int *b);
int elementMult(int m, Matrix * add_one, int x, int y);
int isZero(int m, Matrix * add_one, Vector * e);
int elementAdd(int m, Matrix * add_one, int x, int y);
int elementDiv(int m, Matrix * add_one, int n, int d);
int elementPow(int m, Matrix * add_one, int x, int n);

#endif /* GF_H */
